home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / macros / plain / contrib / rightfig.mac < prev    next >
Encoding:
Text File  |  1992-08-26  |  3.0 KB  |  104 lines

  1. \newif\ifoutput
  2. \newtoks\outputpretest
  3.  
  4. \edef\oldoutput{\the\output} % copy old output routine
  5. \output={\the\outputpretest \ifoutput \oldoutput \fi}
  6.  
  7. \outputpretest={\outputtrue}% default "outputpretest" routine
  8.  
  9.  
  10. % Define an alternate "outputpretest" routine --------------------------------
  11.  
  12. \newbox\pagebox
  13. \newdimen\pageht
  14.  
  15. \newif\iftryingfig    \tryingfigfalse
  16. \newif\ifdoingfig     \doingfigfalse
  17. \newif\ifpageafterfig \pageafterfigfalse
  18.  
  19. \def\dofigtest{%
  20.      \ifnum\outputpenalty=-10001
  21.           \setbox\pagebox=\vbox{\unvbox255}%
  22.           \global\pageht=\ht\pagebox
  23.           \outputfalse
  24.           \unvbox\pagebox
  25.      \else
  26.           \outputtrue
  27.           \ifdoingfig
  28.                \pageafterfigtrue
  29.           \fi
  30.      \fi
  31. }
  32.  
  33.  
  34. % Define the "tryfig" macro for testing figure placement ---------------------
  35.  
  36. \newdimen\startpageht
  37. \newdimen\htdone \htdone=0pt
  38.  
  39. \edef\oldeverypar{\the\everypar}
  40. \everypar={\tryfig \oldeverypar}
  41.  
  42. \def\tryfig{% "\global" is used in case user does any grouping
  43.      \iftryingfig
  44.           {\everypar={\relax}\setbox0=\lastbox
  45.                \parindent=\wd0 \parskip=0pt \par
  46.                \penalty-10001 \leavevmode}%
  47.           \dimen0=\vsize \advance\dimen0 by -\pageht
  48.           \advance\dimen0 by -2\baselineskip
  49.           \ifdim\dimen0>\ht\figbox
  50.                \dimen0=0.3\baselineskip \vrule depth \dimen0 width 0pt
  51.                \vadjust{\kern -\dimen0 \vtop to \dimen0{\baselineskip=\dimen0
  52.                          \vss \vbox to 1ex{\hbox to \hsize{%
  53.                                    \hss \copy\figbox}\vss}\null}}%
  54.                \global\tryingfigfalse
  55.                \global\doingfigtrue
  56.                \global\startpageht=\pageht
  57.                \global\htdone=0pt
  58.                \dohang
  59.           \fi
  60.      \else
  61.           \ifdoingfig
  62.                {\everypar={\relax}\setbox0=\lastbox
  63.                     \parindent=\wd0 \parskip=0pt \par
  64.                     \penalty-10001 \leavevmode}%
  65.                \global\htdone=\pageht
  66.                \global\advance\htdone by -\startpageht
  67.                \ifpageafterfig
  68.                     \global\doingfigfalse
  69.                \else
  70.                     \ifdim\htdone<\ht\figbox
  71.                          \dohang
  72.                     \else
  73.                          \global\doingfigfalse
  74.                     \fi
  75.                \fi
  76.           \else
  77.                \global\outputpretest={\outputtrue}%
  78.           \fi
  79.      \fi
  80. }
  81.  
  82.  
  83. % Define macro to activate the figure insertion macros -----------------------
  84.  
  85. \def\rightinsert{%
  86.      \outputpretest={\dofigtest}
  87.      \tryingfigtrue \doingfigfalse \pageafterfigfalse
  88. }
  89.  
  90.  
  91. % Define macro to calculate and set hanging indent values --------------------
  92.  
  93. \newcount\hangcount
  94. \newdimen\figgutter % gap between text and figure
  95.  
  96. \def\dohang{%
  97.      \dimen0=\ht\figbox \advance\dimen0 by -\htdone
  98.      \advance\dimen0 by 1.49\baselineskip \hangcount=\dimen0
  99.      \divide\hangcount by \baselineskip
  100.      \dimen0=\wd\figbox \advance\dimen0 by \figgutter
  101.      \global\hangafter=-\hangcount \global\hangindent=-\dimen0
  102. }
  103.  
  104.